import java.util.Scanner;

public class CaesarCipher {
    private int shift;

    public  CaesarCipher(int shift){
        this.shift = shift;
    }

    public  String encrypt(String plaintext){
        StringBuilder ciphertext = new StringBuilder();
        for(char character:plaintext.toCharArray()) {
        if(Character.isLetter(character)){
            char base = Character.isLowerCase(character)?'a':'A';

         character = (char)((character-base+shift)%26+base);
        }
        ciphertext.append(character);/*这里的append的作用是按照顺序将转换出的密文自动的依次追加排列成序*/
        }
    return ciphertext.toString();
    }
    public String decrypt(String ciphertext){
        StringBuilder plaintext = new StringBuilder();
        for(char character : ciphertext.toCharArray()){
            if(Character.isLetter(character)){
                char base = Character.isLowerCase(character)?'a':'A';
                character = (char)((character-base-shift+26)%26+base);

            }
            plaintext.append(character);
        }
        return plaintext.toString();
    }

    public static void main(String[] args) {
        CaesarCipher caesarCipher = new CaesarCipher(3);
        Scanner sc = new Scanner(System.in);
        String originalText = sc.next();
        String encrytedText = caesarCipher.encrypt(originalText);
        String decrptedText = caesarCipher.decrypt(encrytedText);
        System.out.println(originalText);
        System.out.println(encrytedText);
        System.out.println(decrptedText);
    }
}
            注释
if(Character.isLetter(character)){
    /*这里的if语句是用来判断输入的明文是否是字母，如果是字母就会运行下面的代码如果不是就会直接输出，比如Hello,World中的","不是字母而是数字所以就不进行下面的转码而会直接输出。*/
    char base = Character.isLowerCase(character)?'a':'A';
/*这里是用来转换输入的明文同时考虑到了明文中会出现大小写的情况*/
character = (char)((character-base+shift)%26+base);
/*这里模26是因为字母有26个,程序将输入的明文先转换成阿斯克码即ASCII码,然后再利用凯撒加密的原理将明文字母往后推几位（根据密钥而言如果密钥是3就往后推3位比如a就会变成的d）但可能会出现往后推出的密文超出ASCII码表中的字母所对应的数字，因此模26后得到余数可以将超出的数字再循环回到26个字母中，比如如果不模26的话输入明文 z 往后推三个后将会对应ASCII码表中的]因此模26取余即可回去再加上A或a对应的ASCII值即可得到密文*/
  ciphertext.append(character);/*这里的append的作用是按照顺序将转换出的密文自动的依次追加排列成序*/